package com.bjsxt;
/**守护线程
 * 在java中有两类线程：
 * User Thread（用户线程）：就是应用程序里的自定义线程。
 * Daemon Thread（守护线程）：比如垃圾回收线程和鼠标放在文字\图片时
 * 会自动提示，就是最典型的守护线程
 * 守护线程（Daemon Thread）是一个服务线程，准确地说是服务其他的线程，这是它的
 * 作用，而其它的线程只有一种，那就是用户线程
 * 守护线程特点：守护线程会随着用户线程死亡而死亡*/
/*守护线程和用户线程的区别
* 用户线程，不随，线程着主线程的死亡而死亡，用户线程只有两种情况会死亡，1，在
* run中异常终止，2，正常把run执行完毕线程死亡
* 守护线程，随着用户线程的死亡而死亡，当用户线程死亡守护线程也随着死亡*/

class Daemon implements Runnable{

    @Override
    public void run() {
        for(int i = 0;i<20;i++){
            System.out.println(Thread.currentThread().getName()+" "+i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}


public class DaemonThread {
    public static void main(String[] args) throws  Exception{
        Thread t = new Thread(new Daemon(),"Daemon");
        //将用户线程设置为守护线程  t设置为主线程的守护线程
        t.setDaemon(true);//默认false
        t.start();
        //主线程休眠
        Thread.sleep(1000);
        System.out.println("主线程结束");//守护线程会随着用户线程死亡而死亡
    }
}
